package cn.sc.summer.domain.route;

import cn.hutool.core.lang.tree.Tree;
import cn.sc.summer.protocol.form.route.RouteBindForm;
import cn.sc.summer.protocol.form.route.RouteForm;
import cn.sc.summer.protocol.params.SysApiInfo;
import cn.sc.summer.protocol.vo.route.RouteVO;

import java.util.List;

/**
 * 接口：路由管理接口
 *
 * @author a-xin
 * @date 2024/1/4 10:43
 */
public interface SysRouteService {

    /**
     * 添加路由信息
     *
     * @param form 路由信息表单
     * @return 路由信息
     */
    RouteVO addRoute(RouteForm form);

    /**
     * 更新路由信息
     *
     * @param form 路由信息表单
     * @return 路由信息
     */
    RouteVO updateRoute(RouteForm form);

    /**
     * 删除路由信息
     *
     * @param id 路由ID
     */
    void deleteRoute(String id);

    /**
     * 获取路由信息
     *
     * @param id 路由ID
     * @return 路由树结构
     */
    List<Tree<String>> getRoute(String id);

    /**
     * 路由绑定api信息
     *
     * @param form 路由权限组信息
     */
    void routeBindApi(RouteBindForm form);

    /**
     * 校验路由是否存在
     *
     * @param routeIds 路由ID
     */
    void checkRouteById(List<String> routeIds);

    /**
     * 获取所有路由对应绑定的api信息
     *
     * @param routeIds 路由信息
     * @return api信息
     */
    List<SysApiInfo> getRouteApiInfo(List<String> routeIds);
}
